package cn.edu.imut.service;

import cn.edu.imut.bean.CartBean;
import cn.edu.imut.bean.OrderBean;
import cn.edu.imut.bean.ProductBean;
import cn.edu.imut.dao.CartDao;
import cn.edu.imut.dao.OrderDao;
import cn.edu.imut.dao.ProductDao;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

public class OrderService {
    private final CartDao cartDao = new CartDao();
    private final ProductDao productDao = new ProductDao();
    private final OrderDao orderDao = new OrderDao();

    /**
     * 从购物车下单
     */
    public void placeOrderFromCart(final int userId) {
        try {
            // 获取购物车中的商品
            List<CartBean> cartItems = cartDao.getCartItemsByUserId(userId);

            if (cartItems.isEmpty()) {
                System.out.println("购物车为空，无法下单！");
                return;
            }

            double totalOrderAmount = 0; // 总订单金额
            List<OrderBean> orders = new ArrayList<>(); // 保存多个订单记录

            // 遍历购物车中的商品
            for (CartBean item : cartItems) {
                ProductBean product = productDao.getProductById(item.getProduct_Id());

                // 校验商品是否存在及库存是否充足
                if (product == null) {
                    System.out.println("商品不存在，无法下单的商品ID：" + item.getProduct_Id());
                    continue;
                }
                if (product.getStock() < item.getProduct_quantity()) {
                    System.out.println("库存不足，无法下单的商品ID：" + item.getProduct_Id());
                    continue;
                }

                // 计算总金额
                double itemTotalPrice = product.getPrice() * item.getProduct_quantity();
                totalOrderAmount += itemTotalPrice;

                // 减少商品库存
                productDao.updateStock(item.getProduct_Id(), product.getStock() - item.getProduct_quantity());

                // 创建订单记录
                OrderBean order = new OrderBean();
                order.setUserId(userId); // 用户ID
                order.setProductId(item.getProduct_Id()); // 商品ID
                order.setOrderStatue("待支付"); // 订单状态
                order.setProsuctQuentity(item.getProduct_quantity()); // 商品数量
                order.setTotalAmount(itemTotalPrice); // 商品小计金额
                order.setAddress("默认地址"); // 可以根据业务需求设置实际地址
                order.setOrderTime(LocalDateTime.now()); // 设置订单创建时间

                // 添加订单记录到列表
                orders.add(order);

                // 保存订单到数据库
                orderDao.addOrder(order);
            }

            // 检查是否有成功的订单
            if (orders.isEmpty()) {
                System.out.println("所有商品均无法下单，请检查库存或商品信息！");
                return;
            }

            // 清空购物车
            cartDao.clearCartByUserId(userId);
            System.out.println("购物车订单已生成，总金额：" + totalOrderAmount + "，请及时支付！");

        } catch (Exception e) {
            System.err.println("从购物车下单时发生错误：" + e.getMessage());
            e.printStackTrace();
        }
    }


    /**
     * 直接下单
     */
    public void placeDirectOrder(final int userId, final int orderProductId, final int orderQuantity, final String address) {
        try {
            // 校验商品是否存在
            ProductBean product = productDao.getProductById(orderProductId);
            if (product == null) {
                System.out.println("商品不存在，无法下单！");
                return;
            }

            // 校验库存是否充足
            if (product.getStock() < orderQuantity) {
                System.out.println("库存不足，无法下单！");
                return;
            }

            // 计算订单金额
            double totalAmount = product.getPrice() * orderQuantity;

            // 更新库存
            productDao.updateStock(orderProductId, product.getStock() - orderQuantity);

            OrderBean order = new OrderBean();
            order.setUserId(userId);
            order.setProductId(orderProductId);
            order.setOrderStatue("待支付");
            order.setProsuctQuentity(orderQuantity);
            order.setTotalAmount(totalAmount);
            order.setAddress(address);
            order.setOrderTime(LocalDateTime.now());

            // 输出订单信息
            System.out.println("新订单创建：" + order);

            // 保存订单到数据库
            orderDao.addOrder(order);
            System.out.println("订单已生成，请及时支付！");
        } catch (Exception e) {
            System.err.println("直接下单时发生错误：" + e.getMessage());
            e.printStackTrace();
        }
    }
}
